package de.bw.jeans.alarminfo;

import java.util.ArrayList;

import android.app.Activity;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.SpannableString;
import android.text.style.UnderlineSpan;
import android.util.Log;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AbsListView.LayoutParams;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gcm.GCMRegistrar;

import de.bw.jeans.alarminfo.datatypes.Alarmdaten;
import de.bw.jeans.alarminfo.tools.AppPorpertiesData;
import de.bw.jeans.alarminfo.tools.XmlFileTools;
import de.bw.jeans.alarminfo.webservice.RegisterDeviceToFwStLeon;
import de.bw.jeans.alarminfo.webservice.UnregisterDeviceFromFwStLeon;

public class ShowAlertListActivity extends Activity {

	TextView tvUeberschrift;
	TextView tvInfozeile;
	LinearLayout linearLayout1;
	
	/** Called when the activity is first created. */

	
	String SENDER_ID;
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
	    super.onCreate(savedInstanceState);
	    setContentView(R.layout.activity_showalertlist);
	    
	    // Die Views im Formular suchen
	    tvUeberschrift = (TextView) findViewById(R.id.textView1);
	    tvInfozeile    = (TextView) findViewById(R.id.textView2);
	    linearLayout1  = (LinearLayout) findViewById(R.id.linearLayout1);
	    
	    // Die Überschrift unterstrichen darstellen
	    String udata="Alarmliste";
	    SpannableString content = new SpannableString(udata);
	    content.setSpan(new UnderlineSpan(), 0, udata.length(), 0);
	    tvUeberschrift.setText(content);
	    
	    // Die Alarme aus dem XML-File lesen
	    ArrayList<Alarmdaten> alarmDaten = XmlFileTools.readAlertXmlFile(this);
	    
	    // Die Infozeile ausfüllen
	    tvInfozeile.setText("Es werden die letzten " + alarmDaten.size() + " Alarme angezeigt...");
	    
	    // Für die ermittelten Alarme einen Auswahlbutton erzeugen
	    for (Alarmdaten alarmdaten : alarmDaten) {
	    	Button button = new Button(this);
	    	Drawable img = this.getResources().getDrawable(R.drawable.signet_bw_small);
	    	button.setCompoundDrawablesWithIntrinsicBounds(img, null, null, null);
	    	button.setGravity(Gravity.RIGHT | Gravity.CENTER_VERTICAL);
	    	button.setText(de.bw.jeans.alarminfo.tools.AlarmTexteConverter.getAlarmtextInKlammer(alarmdaten.getStichwort()));
	    	button.setLayoutParams(new LayoutParams(android.view.ViewGroup.LayoutParams.MATCH_PARENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT));
	    	button.setTag(alarmdaten.getAlarmId());
	    	button.setOnClickListener(new OnClickListener() {
				@Override
				public void onClick(View v) {
					Intent intent = new Intent(v.getContext(), ShowAlertMapActivity.class);
					intent.putExtra("alertId", v.getTag().toString());
					startActivity(intent);
				}
			});
	    	
	    	// Den Button in das Layout übergeben
	    	linearLayout1.addView(button);
		}
	}
	
	public boolean onCreateOptionsMenu(Menu menu) {
		MenuInflater inflater = getMenuInflater();
		inflater.inflate(R.menu.device_registration, menu);
		return true;
	}
	
	public boolean onOptionsItemSelected(MenuItem item) {
		
		int itemId = item.getItemId();
		if (itemId == R.id.item1) {
			// Anmelden bei GCM
			try {
				// Einlesen der SenderId aus dem Properties-File
				SENDER_ID = AppPorpertiesData.getAppProperties().getProperty("SENDER_ID");
				
				// Anmelden beim GCM-Service
				GCMRegistrar.checkDevice(this);
				GCMRegistrar.checkManifest(this);
				final String regId = GCMRegistrar.getRegistrationId(this);
				if(regId.equals("")) {
					GCMRegistrar.register(this, SENDER_ID);
				}
				
				RegisterDeviceToFwStLeon deviceToFwStLeon = new RegisterDeviceToFwStLeon(this);
				deviceToFwStLeon.execute(regId);
			}
			catch(Exception ex) {
				Toast.makeText(this, "Anmeldung fehlgeschlagen!", Toast.LENGTH_LONG).show();
				Log.d("AlarmInfo", "Fehler beim Registrieren des Device!");
			}
		} else if (itemId == R.id.item2) {
			// Abmelden bei GCM
			try {
				// Einlesen der SenderId aus dem Properties-File
				SENDER_ID = AppPorpertiesData.getAppProperties().getProperty("SENDER_ID");
				
				// Anmelden beim GCM-Service
				GCMRegistrar.checkDevice(this);
				GCMRegistrar.checkManifest(this);
				final String regId = GCMRegistrar.getRegistrationId(this);
				if(!regId.equals("")) {
					UnregisterDeviceFromFwStLeon unregisterFromFwStLeon = new UnregisterDeviceFromFwStLeon(this);
					unregisterFromFwStLeon.execute(regId);
				}
			}
			catch (Exception ex) {
				Toast.makeText(this, "Abmeldung fehlgeschlagen!", Toast.LENGTH_LONG).show();
				Log.d("AlarmInfo", "Fehler beim Deregistrieren des Device!");
			}
		}
		
		return true;
	}

}
